local key = KEYS[1]
local threadId  = ARGV[1]
local releaseTime = ARGV[2]
-- 1、查询key是否存在
-- 1.1 不存在直接获取锁，并设置过期时间
if (redis.call('exists', key) == 0) then
    redis.call('hset', key, threadId, '1')
    redis.call('expire', key, releaseTime)
    return 1
end

-- 2、如果key存在，再比较field是否是当前线程(锁是否是自己的）
-- 2.1 如果是当前线程，引用计数加1并重设有效期返回ture
if (redis.call('hexists', key, threadId) == 1) then
    redis.call('hincrby', key, threadId, '1')
    redis.call('expire', key, releaseTime)
    return 1
end
-- return 1 获取锁成功，0失败
return 0